"""
定义函数的关键字 def
格式：def 函数名(形参列表):
         代码块
         return
"""
#定义函数        形参
def printSayHi(name):
    print("Hello",name)
#使用函数    实参
printSayHi("张三")

#默认值参数  在定义函数的时候，给形参一个默认值,在函数调用的时候不给定实参，该形参将使用默认值作为实参
def f1(a,b=3,c=4):
    return a+b+c
res = f1(10) # a = 10   10 + 3 + 4
print(res)
res = f1(10,20,30)# a= 10 b =20 c =30
print(res)

#指定参数
def f2(a,b,c):
    print(f'a:{a},b:{b},c:{c}')
f2(10,20,30)# a=10 b=20 c=30 默认情况下， 参数的顺序和形参的顺序是一致的
f2(b=57,a=41,c=99)#可以根据形参名进行指定实参的传递

#可变参数，在定义函数的时候形参只有一个，在调用的时候实参可以是多个
def f3(*args):
    print(type(args))# 形参实际的数据类型是元组(不可变的列表)
    for num in args:
        print(num)
f3(1,2,3,4,5,6,7,8,9,10)

#关键字参数
def f4(**kw):
    print(type(kw)) #字典 --> Map --> KV  关键字可以理解为形参名 是在传参的时候指定的
    if 'name' in kw: # name 就是 key
        print("欢迎您%s" % kw['name'])# 打印 name 对应的值
    if 'tel' in kw:
        print('你的联系电话是：%s' % kw['tel'])
    if 'age' in kw:
        print('你的年龄：',kw['age'])
#调用
f4(name='张三',tel='18888888',age=24)
f4(user='张三',tel='18888888',age=24)
param = {'name':'张三','tel':'18888888'}
f4(**param)

"""
作用域 ： 1.全局作用域  2.局部作用域
"""
# 局部作用
def foo1():
    a = 5  # 局部变量，只能在foo1函数有用
    print("foo1:",a)
foo1()
#变量a 无法在foo2中使用
# def foo2():
#     print("foo1:", a)
# print(a)
#全局变量 可以在任意位置去使用
b=6
print("全局使用b:",b)
def foo3():
    print("foo3:",b)
foo3()

#将局部变量 变为 全局变量  global
def foo4():
    global c
    c = 200
    print("foo4:",c)
foo4()

print("全局使用c:",c)